package com.gxa.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gxa.common.annotation.RequirePermission;
import com.gxa.common.base.R;
import com.gxa.common.base.Result;
import com.gxa.domain.dto.ProductDTO;
import com.gxa.domain.dto.ProductQueryDto;
import com.gxa.domain.entity.Product;
import com.gxa.domain.entity.ProductCategory;
import com.gxa.domain.vo.ProductListVo;
import com.gxa.service.EmployeeService;
import com.gxa.service.ProductService;
import com.gxa.service.ProductCategoryService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/product")
@CrossOrigin(origins = "*")
@Tag(name = "商品管理", description = "商品信息管理相关接口")
public class ProductController {
    @Autowired
    private ProductService productService;
    @Autowired
    private EmployeeService employeeService;
    @Autowired
    private ProductCategoryService productCategoryService;
    @Operation(summary = "查询商品列表")
    @RequirePermission("商品管理")
    @PostMapping("/list")
    public Result list(@RequestBody ProductQueryDto productQueryDto){
        Page<ProductListVo> resultPage = productService.findProductByQueryDto(productQueryDto);
        return Result.buildSuccess(resultPage.getRecords(),resultPage.getTotal());
    }
    @Operation(summary = "查询商品种类")
    @RequirePermission("商品管理")
    @GetMapping("/findCategory")
    public Result<List<ProductCategory>> findCategory(){
        List<ProductCategory> categoryListAll = productCategoryService.findCategoryListAll();
        return Result.buildSuccess(categoryListAll);
    }
    @Operation(summary = "根据id查询商品信息")
    @RequirePermission("商品管理")
    @GetMapping("/find")
    public Result find(Integer serialNo){
        if(serialNo == null){
            return Result.buildFail(20001,"id不能为空!");
        }
        Product productById = productService.findProductById(serialNo);
        return Result.buildSuccess(productById);
    }
    @Operation(summary = "添加商品")
    @RequirePermission("商品管理")
    @PostMapping("/add")
    public Result add(@RequestBody ProductDTO productDTO){
        try {
            // 处理操作人信息
            if (productDTO.getOperatorName() != null && !productDTO.getOperatorName().trim().isEmpty()) {
                String operatorName = productDTO.getOperatorName().trim();
                
                // 判断是否为数字
                if (operatorName.matches("\\d+")) {
                    // 如果是数字，直接转换为Integer
                    Integer operatorId = Integer.parseInt(operatorName);
                    productDTO.setOperatorId(operatorId);
                } else {
                    // 如果是中文名称，通过姓名查找员工ID
                    Integer operatorId = employeeService.getIdByName(operatorName);
                    if (operatorId == null) {
                        return Result.buildFail(400, "操作员姓名不存在：" + operatorName);
                    }
                    productDTO.setOperatorId(operatorId);
                }
            }
            
            // 处理一级类别信息
            if (productDTO.getFirstCategoryName() != null && !productDTO.getFirstCategoryName().trim().isEmpty()) {
                String firstCategoryName = productDTO.getFirstCategoryName().trim();
                
                // 判断是否为数字
                if (firstCategoryName.matches("\\d+")) {
                    // 如果是数字，直接转换为Integer
                    Integer firstCategoryId = Integer.parseInt(firstCategoryName);
                    productDTO.setFirstLevelCategory(firstCategoryId);
                } else {
                    // 如果是中文名称，通过名称查找分类ID
                    Integer firstCategoryId = productCategoryService.getCategoryIdByName(firstCategoryName);
                    if (firstCategoryId == null) {
                        return Result.buildFail(400, "一级分类名称不存在：" + firstCategoryName);
                    }
                    productDTO.setFirstLevelCategory(firstCategoryId);
                }
            }
            
            // 处理二级类别信息
            if (productDTO.getSecondCategoryName() != null && !productDTO.getSecondCategoryName().trim().isEmpty()) {
                String secondCategoryName = productDTO.getSecondCategoryName().trim();
                
                // 判断是否为数字
                if (secondCategoryName.matches("\\d+")) {
                    // 如果是数字，直接转换为Integer
                    Integer secondCategoryId = Integer.parseInt(secondCategoryName);
                    productDTO.setSecondLevelCategory(secondCategoryId);
                } else {
                    // 如果是中文名称，通过名称查找分类ID
                    Integer secondCategoryId = productCategoryService.getCategoryIdByName(secondCategoryName);
                    if (secondCategoryId == null) {
                        return Result.buildFail(400, "二级分类名称不存在：" + secondCategoryName);
                    }
                    productDTO.setSecondLevelCategory(secondCategoryId);
                }
            }
            
            // 转换为Product实体
            Product product = productDTO.toProduct();
            product.setStockInTime(new Date());
            
            productService.insertProduct(product);
            return Result.buildSuccess();
        } catch (Exception e) {
            e.printStackTrace();
            return Result.buildFail(500, "添加商品失败：" + e.getMessage());
        }
    }
    @Operation(summary = "修改商品")
    @RequirePermission("商品管理")
    @PostMapping("/update")
    public Result update(@RequestBody ProductDTO productDTO){
        try {
            // 处理操作人信息
            if (productDTO.getOperatorName() != null && !productDTO.getOperatorName().trim().isEmpty()) {
                String operatorName = productDTO.getOperatorName().trim();
                
                // 判断是否为数字
                if (operatorName.matches("\\d+")) {
                    // 如果是数字，直接转换为Integer
                    Integer operatorId = Integer.parseInt(operatorName);
                    productDTO.setOperatorId(operatorId);
                } else {
                    // 如果是中文名称，通过姓名查找员工ID
                    Integer operatorId = employeeService.getIdByName(operatorName);
                    if (operatorId == null) {
                        return Result.buildFail(400, "操作员姓名不存在：" + operatorName);
                    }
                    productDTO.setOperatorId(operatorId);
                }
            }
            
            // 处理一级类别信息
            if (productDTO.getFirstCategoryName() != null && !productDTO.getFirstCategoryName().trim().isEmpty()) {
                String firstCategoryName = productDTO.getFirstCategoryName().trim();
                
                // 判断是否为数字
                if (firstCategoryName.matches("\\d+")) {
                    // 如果是数字，直接转换为Integer
                    Integer firstCategoryId = Integer.parseInt(firstCategoryName);
                    productDTO.setFirstLevelCategory(firstCategoryId);
                } else {
                    // 如果是中文名称，通过名称查找分类ID
                    Integer firstCategoryId = productCategoryService.getCategoryIdByName(firstCategoryName);
                    if (firstCategoryId == null) {
                        return Result.buildFail(400, "一级分类名称不存在：" + firstCategoryName);
                    }
                    productDTO.setFirstLevelCategory(firstCategoryId);
                }
            }
            
            // 处理二级类别信息
            if (productDTO.getSecondCategoryName() != null && !productDTO.getSecondCategoryName().trim().isEmpty()) {
                String secondCategoryName = productDTO.getSecondCategoryName().trim();
                
                // 判断是否为数字
                if (secondCategoryName.matches("\\d+")) {
                    // 如果是数字，直接转换为Integer
                    Integer secondCategoryId = Integer.parseInt(secondCategoryName);
                    productDTO.setSecondLevelCategory(secondCategoryId);
                } else {
                    // 如果是中文名称，通过名称查找分类ID
                    Integer secondCategoryId = productCategoryService.getCategoryIdByName(secondCategoryName);
                    if (secondCategoryId == null) {
                        return Result.buildFail(400, "二级分类名称不存在：" + secondCategoryName);
                    }
                    productDTO.setSecondLevelCategory(secondCategoryId);
                }
            }
            
            // 先查询现有商品信息，保留原有的stock_in_time
            Product existingProduct = productService.findProductById(productDTO.getSerialNo());
            if (existingProduct == null) {
                return Result.buildFail(400, "商品不存在");
            }
            
            // 转换为Product实体
            Product product = productDTO.toProduct();
            // 保留原有的入库时间
            product.setStockInTime(existingProduct.getStockInTime());
            
            productService.updateProduct(product);
            return Result.buildSuccess();
        } catch (Exception e) {
            e.printStackTrace();
            return Result.buildFail(500, "修改商品失败：" + e.getMessage());
        }
    }
    @Operation(summary = "删除商品")
    @RequirePermission("商品管理")
    @DeleteMapping("/delete/{serialNo}")
    public Result delete(@PathVariable Integer serialNo){
        productService.deleteProductById(serialNo);
//        return R.success();
        return Result.buildSuccess();
    }
}
